/*
 * @Author: Seon.Hu SeonHu@126.com
 * @Date: 2024-01-24 10:04:04
 * @LastEditors: Seon.Hu SeonHu@126.com
 * @LastEditTime: 2024-01-26 11:02:14
 * @FilePath: \bg-vben\src\components\AdVxeModal\src\props.ts
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import type { PropType } from 'vue';
import { VxeModalPropTypes, ModalEventTypes } from 'vxe-table';
// import modalProps from 'vxe-table/es/modal/src/props';
import { ButtonProps, ButtonType } from 'ant-design-vue/es/button/buttonTypes';
import { useI18n } from '@/hooks/web/useI18n';
import { propTypes } from '@/utils/propTypes';

const { t } = useI18n();

/** 弹窗参数 */
export const modalProps = {
  /** 设置唯一的 id（对于 Message 防止重复弹出 或 Storage 拖动状态保存等场景可能会用到） */
  id: propTypes.string.def(undefined),
  /** 是否打开 */
  open: { type: Boolean, default: false },
  /** 尺寸 */
  size: {
    type: String as PropType<VxeModalPropTypes.Size>,
    default: undefined,
  },
  /** 窗口类型 */
  type: {
    type: String as PropType<VxeModalPropTypes.Type>,
    default: 'modal',
  },
  /** 是否加载中 */
  loading: propTypes.bool.def(false),
  /** 窗口的标题 */
  title: { type: String },
  /** 窗口标题右侧的提示信息 */
  helpMessage: [String, Array] as PropType<string | string[]>,
  /** 给窗口附加 className */
  className: propTypes.string.def(undefined),
  /** 是否显示头部 */
  showHeader: propTypes.bool.def(true),
  /** 是否显示底部 */
  showFooter: propTypes.bool.def(true),
  /** 是否锁住页面，不允许窗口之外的任何操作。 */
  lockView: propTypes.bool.def(false),
  /** 是否锁住滚动条，不允许页面滚动。 */
  lockScroll: propTypes.bool.def(false),
  /** 是否显示遮罩层 */
  mask: propTypes.bool.def(false),
  /** 是否允许点击遮罩层关闭窗口 */
  maskClosable: propTypes.bool.def(false),
  /** 是否允许按 Esc 键关闭窗口 */
  escClosable: propTypes.bool.def(true),
  /** 标题是否标显示最大化、最小化与还原按钮 */
  showZoom: propTypes.bool.def(true),
  /** 是否显示关闭按钮 */
  showClose: propTypes.bool.def(true),
  /** 只对 type=modal 有效，是否允许通过双击头部放大或还原窗口 */
  dblclickZoom: propTypes.bool.def(true),
  /** 是否启用窗口拖动 */
  draggable: propTypes.bool.def(true),
  /** 是否允许窗口边缘拖动调整窗口大小 */
  resize: propTypes.bool.def(true),
  /** 窗口的宽度 */
  width: {
    type: [String, Number] as PropType<string | number>,
    default: '50%',
  },
  /** 窗口的高度 */
  height: {
    type: [String, Number] as PropType<string | number>,
    default: undefined,
  },
  /** 窗口的最小宽度 */
  minWidth: {
    type: [String, Number] as PropType<string | number>,
    default: '30%',
  },
  /** 窗口的最小高度 */
  minHeight: {
    type: [String, Number] as PropType<string | number>,
    default: undefined,
  },
  /** 窗口的最大宽度 */
  maxWidth: {
    type: [String, Number] as PropType<string | number>,
    default: '100%',
  },
  /** 窗口的最大高度 */
  maxHeight: {
    type: [String, Number] as PropType<string | number>,
    default: '100%',
  },
  /** 只对 type=modal 有效，窗口的默认位置，可以设置为 center 居中显示。 */
  position: {
    type: [String, Object] as PropType<VxeModalPropTypes.Position>,
    default: 'center',
  },
  /** 自定义堆叠顺序（对于某些特殊场景，比如被遮挡时可能会用到） */
  zIndex: { type: Number },
  /** 设置标题内容过长时显示为省略号 */
  showTitleOverflow: propTypes.bool.def(true),
  /** 是否将弹框容器插入于 body 内 */
  transfer: propTypes.bool.def(true),
  /** 窗口打开时自动最大化显示 */
  fullscreen: propTypes.bool.def(false),
  /** 记忆功能，会记住最后操作状态，再次打开窗口时还原窗口状态 */
  remember: propTypes.bool.def(true),
  /** 在窗口关闭时销毁内容 */
  destroyOnClose: propTypes.bool.def(true),
  /** 是否启用 localStorage 本地保存，会将窗口拖动的状态保存到本地（需要有 id） */
  storage: propTypes.bool.def(false),
  /** 显示取消按钮 */
  showCancel: propTypes.bool.def(true),
  /** 取消按钮类型 */
  cancelType: {
    type: [String] as PropType<ButtonType>,
    default: 'default',
  },
  /** 取消按钮加载中 */
  cancelLoading: propTypes.bool.def(false),
  /** 取消按钮文字 */
  cancelText: { type: String, default: t('common.cancelText') },
  /** 取消按钮参数 */
  cancelButtonProps: Object as PropType<ButtonProps>,
  /** 显示确认按钮 */
  showOk: propTypes.bool.def(true),
  /** 确认按钮类型 */
  okType: {
    type: [String] as PropType<ButtonType>,
    default: 'primary',
  },
  /** 确认按钮加载中 */
  okLoading: propTypes.bool.def(false),
  /** 确认按钮文字 */
  okText: { type: String, default: t('common.okText') },
  /** 确认按钮参数 */
  okButtonProps: Object as PropType<ButtonProps>,
  /** 关闭方法，返回 false 阻止关闭。 */
  closeFunc: Function as PropType<(params: { type: ModalEventTypes }) => Promise<boolean>>,
  /** 窗口关闭后回调 */
  afterClose: Function as PropType<() => Promise<VueNode>>,
};
